Unix Domain Socket এর Server এবং Client উদাহরণ

Computer Programming - ইউনিক্স সকেট (Unix Socket) Unix Domain Sockets (Unix Domain Sockets) |
253
253

নিচে Unix Domain Socket ব্যবহার করে একটি সার্ভার এবং ক্লায়েন্ট প্রোগ্রাম উদাহরণ দেওয়া হলো, যা প্রক্রিয়াগুলোর মধ্যে লোকালি (একই সিস্টেমে) যোগাযোগ করতে সহায়ক। এই উদাহরণে C ভাষা ব্যবহার করা হয়েছে, এবং এটি একটি Stream Socket (SOCK_STREAM) প্রোটোকল ব্যবহার করে TCP-এর মতো ধারাবাহিক (reliable) সংযোগ তৈরি করবে।

Unix Domain Socket Server Program (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/uds_socket"

int main() {
    int server_fd, client_fd;
    struct sockaddr_un server_addr, client_addr;
    socklen_t client_len;
    char buffer[100];
    
    // 1. Socket তৈরি করা
    if ((server_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }
    
    // 2. ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. Binding করা
    unlink(SOCKET_PATH); // যদি আগে থেকে কোনো ফাইল থাকে, তা মুছে ফেলা
    if (bind(server_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Bind failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }
    
    // 4. Listening করা
    if (listen(server_fd, 5) < 0) {
        perror("Listen failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    printf("Server is listening...\n");

    client_len = sizeof(client_addr);
    // 5. Accepting সংযোগ
    if ((client_fd = accept(server_fd, (struct sockaddr*)&client_addr, &client_len)) < 0) {
        perror("Accept failed");
        close(server_fd);
        exit(EXIT_FAILURE);
    }

    // 6. ডেটা গ্রহণ করা
    int n = read(client_fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Client: %s\n", buffer);

    // 7. ডেটা পাঠানো
    write(client_fd, "Hello from server", 17);

    // 8. Socket বন্ধ করা
    close(client_fd);
    close(server_fd);
    unlink(SOCKET_PATH); // Socket ফাইল মুছে ফেলা

    return 0;
}

Unix Domain Socket Client Program (C ভাষায়)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/socket.h>
#include <sys/un.h>

#define SOCKET_PATH "/tmp/uds_socket"

int main() {
    int client_fd;
    struct sockaddr_un server_addr;
    char buffer[100];

    // 1. Socket তৈরি করা
    if ((client_fd = socket(AF_UNIX, SOCK_STREAM, 0)) < 0) {
        perror("Socket creation failed");
        exit(EXIT_FAILURE);
    }

    // 2. সার্ভার ঠিকানা সেটআপ করা
    memset(&server_addr, 0, sizeof(server_addr));
    server_addr.sun_family = AF_UNIX;
    strncpy(server_addr.sun_path, SOCKET_PATH, sizeof(server_addr.sun_path) - 1);

    // 3. সার্ভারের সাথে সংযোগ স্থাপন করা
    if (connect(client_fd, (struct sockaddr*)&server_addr, sizeof(server_addr)) < 0) {
        perror("Connection failed");
        close(client_fd);
        exit(EXIT_FAILURE);
    }

    // 4. ডেটা পাঠানো
    char *message = "Hello from client";
    write(client_fd, message, strlen(message));

    // 5. ডেটা গ্রহণ করা
    int n = read(client_fd, buffer, sizeof(buffer));
    buffer[n] = '\0';
    printf("Server: %s\n", buffer);

    // 6. Socket বন্ধ করা
    close(client_fd);

    return 0;
}

প্রোগ্রামের বিশ্লেষণ

Server Program:

  1. Socket তৈরি: socket() ফাংশন ব্যবহার করে AF_UNIX এবং SOCK_STREAM দিয়ে একটি Unix Domain Socket তৈরি করা হয়।
  2. Binding: bind() ফাংশন ব্যবহার করে Socket-কে একটি নির্দিষ্ট পাথ (/tmp/uds_socket) এ সংযুক্ত করা হয়।
  3. Listening: listen() ফাংশন ইনকামিং সংযোগের জন্য সার্ভারকে অপেক্ষা করায়।
  4. Accepting: accept() ফাংশন ব্যবহার করে একটি ইনকামিং সংযোগ গ্রহণ করা হয়।
  5. ডেটা গ্রহণ: read() ফাংশন ক্লায়েন্ট থেকে ডেটা গ্রহণ করে।
  6. ডেটা পাঠানো: write() ফাংশন ব্যবহার করে সার্ভার ক্লায়েন্টে ডেটা পাঠায়।
  7. Socket বন্ধ করা: প্রোগ্রাম শেষে সিস্টেমের রিসোর্স মুক্ত করতে close() এবং unlink() ফাংশন ব্যবহার করে Socket বন্ধ এবং মুছে ফেলা হয়।

Client Program:

  1. Socket তৈরি: socket() ফাংশন AF_UNIX এবং SOCK_STREAM দিয়ে ক্লায়েন্টের জন্য একটি Socket তৈরি করে।
  2. সার্ভারের ঠিকানা সেটআপ: সার্ভারের ঠিকানা (পাথ) server_addr.sun_path-এ সেট করা হয়।
  3. Connection: connect() ফাংশন সার্ভারের সাথে সংযোগ স্থাপন করে।
  4. ডেটা পাঠানো: write() ফাংশন ব্যবহার করে ক্লায়েন্ট একটি বার্তা পাঠায়।
  5. ডেটা গ্রহণ: read() ফাংশন ব্যবহার করে সার্ভার থেকে ডেটা গ্রহণ করে।
  6. Socket বন্ধ করা: প্রোগ্রাম শেষে close() ফাংশন ব্যবহার করে Socket বন্ধ করা হয়।

কিভাবে প্রোগ্রামগুলো চালাবেন

প্রথমে সার্ভার প্রোগ্রাম চালু করুন:

  • সার্ভার প্রোগ্রাম চালু হলে এটি /tmp/uds_socket পাথে একটি Unix Domain Socket তৈরি করে এবং ইনকামিং সংযোগের জন্য অপেক্ষা করবে।

এরপর ক্লায়েন্ট প্রোগ্রাম চালু করুন:

  • ক্লায়েন্ট প্রোগ্রাম চালু হলে এটি সেই একই পাথে (যেখানে সার্ভার অপেক্ষমাণ রয়েছে) সংযোগ স্থাপন করবে এবং বার্তা পাঠাবে।

ক্লায়েন্ট এবং সার্ভারের মধ্যে বার্তা আদান-প্রদান:

  • ক্লায়েন্ট একটি বার্তা পাঠাবে, এবং সার্ভার সেটি গ্রহণ করে উত্তরে একটি বার্তা পাঠাবে। উভয় প্রোগ্রাম তাদের নিজ নিজ টার্মিনালে বার্তাগুলো প্রদর্শন করবে।
common.content_added_by
টপ রেটেড অ্যাপ

স্যাট অ্যাকাডেমী অ্যাপ

আমাদের অল-ইন-ওয়ান মোবাইল অ্যাপের মাধ্যমে সীমাহীন শেখার সুযোগ উপভোগ করুন।

ভিডিও
লাইভ ক্লাস
এক্সাম
ডাউনলোড করুন
Promotion